package com.modbus.tcp.utils;

import com.intelligt.modbus.jlibmodbus.Modbus;
import com.intelligt.modbus.jlibmodbus.exception.ModbusIOException;
import com.intelligt.modbus.jlibmodbus.exception.ModbusNumberException;
import com.intelligt.modbus.jlibmodbus.exception.ModbusProtocolException;
import com.intelligt.modbus.jlibmodbus.master.ModbusMaster;
import com.intelligt.modbus.jlibmodbus.master.ModbusMasterFactory;
import com.intelligt.modbus.jlibmodbus.msg.ModbusRequestBuilder;
import com.intelligt.modbus.jlibmodbus.msg.base.ModbusRequest;
import com.intelligt.modbus.jlibmodbus.msg.response.ReadHoldingRegistersResponse;
import com.intelligt.modbus.jlibmodbus.tcp.TcpParameters;

import java.net.InetAddress;

public class JlibmodbusUtil {
//    public static void main(String[] args) {
//        try {
//
//
//            // 设置主机TCP参数
//            TcpParameters tcpParameters = new TcpParameters();
//
//            // 设置TCP的ip地址
//            InetAddress adress = InetAddress.getByName("127.0.0.1");
//
//            // TCP参数设置ip地址
//            // tcpParameters.setHost(InetAddress.getLocalHost());
//            tcpParameters.setHost(adress);
//
//            // TCP设置长连接
//            tcpParameters.setKeepAlive(true);
//            // TCP设置端口，这里设置是默认端口502
//            tcpParameters.setPort(Modbus.TCP_PORT);
//
//            // 创建一个TCP主机
//            ModbusMaster master = ModbusMasterFactory.createModbusMasterTCP(tcpParameters);
////            //创建一个RTU主机
////            SerialParameters serialParameters = new SerialParameters();
////            serialParameters.setDevice("COM2");
////            serialParameters.setBaudRate(SerialPort.BaudRate.BAUD_RATE_9600);
////            ModbusMasterFactory.createModbusMasterRTU(serialParameters);
//
//            Modbus.setAutoIncrementTransactionId(true);
//
//            int slaveId = 1;//从机地址
//            int offset = 0;//寄存器读取开始地址
//            int quantity = 10;//读取的寄存器数量
//
//
//            try {
//                if (!master.isConnected()) {
//                    master.connect();// 开启连接
//                }
//
//
//                ModbusRequest request = ModbusRequestBuilder.getInstance().buildReadHoldingRegisters(slaveId, offset, quantity);
//
//                while (true) {
//                    ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse)master.processRequest(request);
//                    // 读取对应从机的数据，readInputRegisters读取的写寄存器，功能码04
//                    int[] registerValues = response.getRegisters();
//
//                    // 控制台输出
//                    for (int value : registerValues) {
//                        System.out.println("Address: " + offset++ + ", Value: " + value);
//                    }
//
//                    Thread.sleep(1000);
//                }
//
//
//
//
//            } catch (ModbusProtocolException e) {
//                e.printStackTrace();
//            } catch (ModbusNumberException e) {
//                e.printStackTrace();
//            } catch (ModbusIOException e) {
//                e.printStackTrace();
//            } finally {
//                try {
//                    master.disconnect();
//                } catch (ModbusIOException e) {
//                    e.printStackTrace();
//                }
//            }
//        } catch (RuntimeException e) {
//            throw e;
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
}
